home *** CD-ROM | disk | FTP | other *** search
/ HamCall (October 1991) / HamCall (Whitehall Publishing)(1991).bin / prgming / ctutor / chap03.txt < prev    next >
Text File  |  1990-10-14  |  17KB  |  410 lines

  1.  
  2.                                                      Chapter 3
  3.  
  4.                                                PROGRAM CONTROL
  5.  
  6.  
  7.  
  8.  
  9. THE WHILE LOOP
  10. ______________________________________________________________
  11.  
  12. The C programming language has several structures for looping
  13. and conditional branching.  We will cover them all in this
  14. chapter and we will begin with the while loop.
  15.  
  16. The while loop continues to loop while some condition is true.
  17. When the condition becomes false, the looping is discontinued.
  18. It therefore does just what it says it does, the name of the
  19. loop being very descriptive.
  20.  
  21. Load the program WHILE.C and display it for        ===========
  22. an example of a while loop.  We begin with a         WHILE.C
  23. comment and the program name, then go on to        ===========
  24. define an integer variable "count" within the
  25. body of the program.  The variable is set to zero and we come
  26. to the while loop itself.  The syntax of a while loop is just
  27. as shown here.  The keyword "while" is followed by an
  28. expression of something in parentheses, followed by a compound
  29. statement bracketed by braces.  As long as the expression in
  30. parenthesis is true, all statements within the braces will be
  31. executed.  In this case, since the variable count is
  32. incremented by one every time the statements are executed, it
  33. will eventually reach 6.  At that time the statement will not
  34. be executed, and the loop will be terminated.  The program
  35. control will resume at the statement following the statements
  36. in braces.
  37.  
  38. We will cover the compare expression, the one in parentheses,
  39. in the next chapter.  Until then, simply accept the
  40. expressions for what you think they should do and you will
  41. probably be correct.
  42.  
  43. Several things must be pointed out regarding the while loop.
  44. First, if the variable count were initially set to any number
  45. greater than 5, the statements within the loop would not be
  46. executed at all, so it is possible to have a while loop that
  47. never is executed.  Secondly, if the variable were not
  48. incremented in the loop, then in this case, the loop would
  49. never terminate, and the program would never complete.
  50. Finally, if there is only one statement to be executed within
  51. the loop, it does not need braces but can stand alone.
  52. Compile and run this program after you have studied it enough
  53. to assure yourself that you understand its operation
  54. completely.
  55.  
  56.  
  57.  
  58.                                                            3-1
  59.  
  60.                                    Chapter 3 - Program Control
  61.  
  62. THE DO-WHILE LOOP
  63. ______________________________________________________________
  64.  
  65. A variation of the while loop is illustrated     =============
  66. in the program DOWHILE.C, which you should         DOWHILE.C
  67. load and display.  This program is nearly        =============
  68. identical to the last one except that the
  69. loop begins with the keyword "do", followed by a compound
  70. statement in braces, then the keyword "while", and finally an
  71. expression in parentheses.  The statements in the braces are
  72. executed repeatedly as long as the expression in parentheses
  73. is true.  When the expression in parentheses becomes false,
  74. execution is terminated, and control passes to the statements
  75. following this statement.
  76.  
  77. Several things must be pointed out regarding this statement.
  78. Since the test is done at the end of the loop, the statements
  79. in the braces will always be executed at least once.
  80. Secondly, if "i" were not changed within the loop, the loop
  81. would never terminate, and hence the program would never
  82. terminate.  Finally, just like the while loop, if only one
  83. statement will be executed within the loop, no braces are
  84. required.  Compile and run this program to see if it does what
  85. you think it should do.
  86.  
  87. It should come as no surprise to you that these loops can be
  88. nested.  That is, one loop can be included within the compound
  89. statement of another loop, and the nesting level has no limit.
  90.  
  91.  
  92. THE FOR LOOP
  93. ______________________________________________________________
  94.  
  95. The "for" loop is really nothing new, it is      =============
  96. simply a new way to describe the "while"           FORLOOP.C
  97. loop.  Load and edit the file named FORLOOP.C    =============
  98. for an example of a program with a "for"
  99. loop. The "for" loop consists of the keyword "for" followed
  100. by a rather large expression in parentheses.  This expression
  101. is really composed of three fields separated by semi-colons.
  102.  
  103. The first field contains the expression "index = 0" and is
  104. an initializing field.  Any expressions in this field are
  105. executed prior to the first pass through the loop.  There is
  106. essentially no limit as to what can go here, but good
  107. programming practice would require it to be kept simple.
  108. Several initializing statements can be placed in this field,
  109. separated by commas.
  110.  
  111. The second field, in this case containing "index < 6", is the
  112. test which is done at the beginning of each loop through the
  113. program.  It can be any expression which will evaluate to a
  114. true or false.  (More will be said about the actual value of
  115. true and false in the next chapter.)
  116.  
  117.                                                            3-2
  118.  
  119.                                    Chapter 3 - Program Control
  120.  
  121. The expression contained in the third field is executed each
  122. time the loop is executed but it is not executed until after
  123. those statements in the main body of the loop are executed.
  124. This field, like the first, can also be composed of several
  125. operations separated by commas.
  126.  
  127. Following the for() expression is any single or compound
  128. statement which will be executed as the body of the loop.  A
  129. compound statement is any group of valid C statements enclosed
  130. in braces.  In nearly any context in C, a simple statement can
  131. be replaced by a compound statement that will be treated as
  132. if it were a single statement as far as program control goes.
  133. Compile and run this program.
  134.  
  135. You may be wondering why there are two statements available
  136. that do exactly the same thing because the "while" and the
  137. "for" loop do exactly the same thing.  The "while" is
  138. convenient to use for a loop that you don't have any idea how
  139. many times the loop will be executed, and the "for" loop is
  140. usually used in those cases when you are doing a fixed number
  141. of iterations.  The "for" loop is also convenient because it
  142. moves all of the control information for a loop into one
  143. place, between the parentheses, rather than at both ends of
  144. the code.  It is your choice as to which you would rather use.
  145.  
  146.  
  147.  
  148. THE IF STATEMENT
  149. ______________________________________________________________
  150.  
  151. Load and display the file IFELSE.C for an         ============
  152. example of our first conditional branching          IFELSE.C
  153. statement, the "if".  Notice first, that          ============
  154. there is a "for" loop with a compound
  155. statement as its executable part containing two "if"
  156. statements.  This is an example of how statements can be
  157. nested.  It should be clear to you that each of the "if"
  158. statements will be executed 10 times.
  159.  
  160. Consider the first "if" statement.  It starts with the keyword
  161. "if" followed by an expression in parentheses.  If the
  162. expression is evaluated and found to be true, the single
  163. statement following the "if" is executed, and if false, the
  164. following statement is skipped.  Here too, the single
  165. statement can be replaced by a compound statement composed of
  166. several statements bounded by braces.   The expression "data
  167. == 2" is simply asking if the value of data is equal to 2,
  168. this will be explained in detail in the next chapter.  (Simply
  169. suffice for now that if "data = 2" were used in this context,
  170. it would mean a completely different thing.)
  171.  
  172.  
  173.  
  174.  
  175.  
  176.                                                            3-3
  177.  
  178.                                    Chapter 3 - Program Control
  179.  
  180. NOW FOR THE IF-ELSE
  181. ______________________________________________________________
  182.  
  183. The second "if" is similar to the first with the addition of
  184. a new keyword, the "else" following the first printf
  185. statement.  This simply says that if the expression in the
  186. parentheses evaluates as true, the first expression is
  187. executed, otherwise the expression following the "else" is
  188. executed.  Thus, one of the two expressions will always be
  189. executed, whereas in the first example the single expression
  190. was either executed or skipped.  Both will find many uses in
  191. your C programming efforts.  Compile and run this program to
  192. see if it does what you expect.
  193.  
  194.  
  195. THE BREAK AND CONTINUE
  196. ______________________________________________________________
  197.  
  198. Load the file named BREAKCON.C for an           ==============
  199. example of two new statements.  Notice that       BREAKCON.C
  200. in the first "for", there is an if              ==============
  201. statement that calls a break if xx equals
  202. 8.  The break will jump out of the loop you are in and begin
  203. executing statements following the loop, effectively
  204. terminating the loop.  This is a valuable statement when you
  205. need to jump out of a loop depending on the value of some
  206. results calculated in the loop.  In this case, when xx reaches
  207. 8, the loop is terminated and the last value printed will be
  208. the previous value, namely 7.
  209.  
  210. The next "for" loop, contains a continue statement which does
  211. not cause termination of the loop but jumps out of the present
  212. iteration.  When the value of xx reaches 8 in this case, the
  213. program will jump to the end of the loop and continue
  214. executing the loop, effectively eliminating the printf
  215. statement during the pass through the loop when xx is eight.
  216. Compile and run this program.
  217.  
  218.  
  219. THE SWITCH STATEMENT
  220. ______________________________________________________________
  221.  
  222. Load and display the file SWITCH.C for an         ============
  223. example of the biggest construct yet in the         SWITCH.C
  224. C language, the switch.  The switch is not        ============
  225. difficult, so don't let it intimidate you.
  226. It begins with the keyword "switch" followed by a variable in
  227. parentheses which is the switching variable, in this case
  228. "truck".  As many cases as desired are then enclosed within
  229. a pair of braces.  The reserved word "case" is used to begin
  230. each case, followed by the value of the variable, then a
  231. colon, and the statements to be executed.
  232.  
  233.  
  234.                                                            3-4
  235.  
  236.                                    Chapter 3 - Program Control
  237.  
  238. In this example, if the variable "truck" contains the value
  239. 3 during this pass of the switch statement, the printf will
  240. cause "The value is three" to be displayed, and the "break"
  241. statement will cause us to jump out of the switch.
  242.  
  243. Once an entry point is found, statements will be executed
  244. until a "break" is found or until the program drops through
  245. the bottom of the switch braces.  If the variable has the
  246. value 5, the statements will begin executing where "case 5 :"
  247. is found, but the first statements found are where the case
  248. 8 statements are.  These are executed and the break statement
  249. in the "case 8" portion will direct the execution out the
  250. bottom of the switch.  The various case values can be in any
  251. order and if a value is not found, the default portion of the
  252. switch will be executed.
  253.  
  254. It should be clear that any of the above constructs can be
  255. nested within each other or placed in succession, depending
  256. on the needs of the particular programming project at hand.
  257. Be sure to compile and run SWITCH.C and examine the results.
  258.  
  259.  
  260. THE EVIL GOTO STATEMENT
  261. ______________________________________________________________
  262.  
  263. Load and display the file GOTOEX.C for an         ============
  264. example of a file with some "goto" statements       GOTOEX.C
  265. in it.  To use a "goto" statement, you simply     ============
  266. use the reserved word "goto" followed by the
  267. symbolic name to which you wish to jump.  The name is then
  268. placed anywhere in the program followed by a colon.  You can
  269. jump nearly anywhere within a function, but you are not
  270. permitted to jump into a loop, although you are allowed to
  271. jump out of a loop.  Also, you are not allowed to jump out of
  272. any function into another.  These attempts will be flagged by
  273. your C compiler as an error if you attempt any of them.
  274.  
  275. This particular program is really a mess but it is a good
  276. example of why software writers are trying to eliminate the
  277. use of the "goto" statement as much as possible.  The only
  278. place in this program where it is reasonable to use the "goto"
  279. is the one in line 18 where the program jumps out of the three
  280. nested loops in one jump.  In this case it would be rather
  281. messy to set up a variable and jump successively out of all
  282. three loops but one "goto" statement gets you out of all three
  283. in a very concise manner.
  284.  
  285. Some persons say the "goto" statement should never be used
  286. under any circumstances, but this is rather narrow minded
  287. thinking.  If there is a place where a "goto" will clearly do
  288. a neater control flow than some other construct, feel free to
  289. use it.  It should not be abused however, as it is in the rest
  290. of the program on your monitor.
  291.  
  292.                                                            3-5
  293.  
  294.                                    Chapter 3 - Program Control
  295.  
  296. Entire books are written on "gotoless" programming, better
  297. known as Structured Programming.  These will be left to your
  298. study.  One point of reference is the Visual Calculator
  299. described in Chapter 14 of this tutorial.  This program is
  300. contained in four separately compiled programs and is a rather
  301. large complex program.  If you spend some time studying the
  302. source code, you will find that there is not a single "goto"
  303. statement anywhere in it.  Compile and run GOTOEX.C and study
  304. its output.  It would be a good exercise to rewrite it and see
  305. how much more readable it is when the statements are listed
  306. in order.
  307.  
  308.  
  309. FINALLY, A MEANINGFUL PROGRAM
  310. ______________________________________________________________
  311.  
  312. Load the file named TEMPCONV.C for an example   ==============
  313. of a useful, even though somewhat limited         TEMPCONV.C
  314. program.  This is a program that generates a    ==============
  315. list of centigrade and farenheit temperatures
  316. and prints a message out at the freezing point of water and
  317. another at the boiling point of water.
  318.  
  319. Of particular importance is the formatting.  The header is
  320. simply several lines of comments describing what the program
  321. does in a manner that catches the readers attention and is
  322. still pleasing to the eye. You will eventually develop your
  323. own formatting style, but this is a good way to start.  Also
  324. if you observe the for loop, you will notice that all of the
  325. contents of the compound statement are indented 3 spaces to
  326. the right of the "for" keyword, and the closing brace is lined
  327. up under the "f" in "for".  This makes debugging a bit easier
  328. because the construction becomes very obvious.  You will also
  329. notice that the "printf" statements that are in the "if"
  330. statements within the big "for" loop are indented three
  331. additional spaces because they are part of another construct.
  332.  
  333. This is the first program in which we used more than one
  334. variable.  The three variables are simply defined on three
  335. different lines and are used in the same manner as a single
  336. variable was used in previous programs.  By defining them on
  337. different lines, we have an opportunity to define each with
  338. a comment.
  339.  
  340.  
  341. ANOTHER POOR PROGRAMMING EXAMPLE
  342. ______________________________________________________________
  343.  
  344. Recalling UGLYFORM.C from the last chapter,     ==============
  345. you saw a very poorly formatted program.  If      DUMBCONV.C
  346. you load and display DUMBCONV.C you will have   ==============
  347. an example of poor formatting which is much
  348. closer to what you will find in practice.  This is the same
  349. program as TEMPCONV.C with the comments removed and the
  350.  
  351.                                                            3-6
  352.  
  353.                                    Chapter 3 - Program Control
  354.  
  355. variable names changed to remove the descriptive aspect of the
  356. names.  Although this program does exactly the same as the
  357. last one, it is much more difficult to read and understand.
  358. You should begin to develop good programming practices now.
  359. Compile and run this program to see that it does exactly what
  360. the last one did.
  361.  
  362.  
  363. PROGRAMMING EXERCISES
  364. ______________________________________________________________
  365.  
  366. 1.   Write a program that writes your name on the monitor ten
  367.      times.  Write this program three times, once with each
  368.      looping method.
  369.  
  370. 2.   Write a program that counts from one to ten, prints the
  371.      values on a separate line for each, and includes a
  372.      message of your choice when the count is 3 and a
  373.      different message when the count is 7.
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.                                                            3-7
  409.  
  410.